package com.gack.business.service;

import java.util.List;
import java.util.Map;

public interface EnterpriseOperatorServiceInterface {

	/**
	 * 根据筛选条件,查询公司ItemVO集合
	 * @param page 所请求的页数  从0开始
	 * @param size 每页显示记录数量
	 * @param status 公司认证状态 0:未认证 1:已认证
	 * @param secondCondition 第二个筛选条件 1:公司名称 2:创建人名称 3:所属行业 4:所在地区
	 * @param input 输入匹配串
	 * @return status:error/success msg:错误或成功消息  
	 * 		   registeredNum:已注册公司数量  certificationNum:已认证公司数量  ucertification:未认证公司数量  dissolveNum:已解散公司数量   payAmount:购买商务卡的共计消费金额
	 * 		   enterpriseItemList:公司ItemVO集合(按注册时间降序排序)
	 * 		   certificationWaitingEnterpriseNum:待认证审批的公司数量
	 */
	Map<String, Object> findEnterpriseItemVOListByInput(Integer page, Integer size, String status, String secondCondition, String input);

	/**
	 * 根据公司id,查询公司基本信息(enterpriseBasicInfo),公司架构图(enterpriseFramework), 公司某部门人员信息ItemVO集合(userItemList),
	 * 			公司的购卡记录ItemVO集合(businessCardRecordItemList)
	 * 			公司的消费明细ItemVO集合(orderItemList)
	 * @param enterpriseId
	 * @return status:error/success msg:错误或成功消息
	 *   	   enterpriseBasicInfo:公司基本信息对象 
	 *         enterpriseFramework:公司架构对象 
	 *         topDepartmentItemList:公司一级部门对象集合(按部门名称排序)(若有无部门人员则展示'无部门',添加到部门集合最末处)
	 *         userItemList:公司人员信息ItemVO集合(前10条记录,按部门名称+人员名称排序)   userItemListTotal:公司人员信息ItemVO集合总数量
	 *         businessCardRecordItemList:购卡记录集合   businessCardRecordItemListTotal:公司购卡记录总数量 
	 *         orderItemList:匹配筛选条件的消费记录集合   orderItemListTotal:匹配筛选条件的全部消费记录数量 
	 *         enterpriseSurplusAmount:公司账户余额
	 */
	Map<String, Object> findEnterpriseDetailByEnterpriseId(String enterpriseId);
	
	/**
	 * 根据公司id,查询公司基本信息
	 * @param enterpriseId 公司id
	 * @return status:error/success msg:错误或成功消息  enterpriseBasicInfo:公司基本信息对象
	 */
	Map<String, Object> findEnterpriseBasicInfoByEnterpriseId(String enterpriseId);
	
	/**
	 * 根据公司id,查询公司架构图
	 * @param enterpriseId 公司id
	 * @return status:error/success msg:错误或成功消息  enterpriseFramework:公司架构对象
	 */
	Map<String, Object> findEnterpriseFramework(String enterpriseId);

	/**
	 * 根据公司id,查询该公司所有一级部门ItemVO(若有无部门人员,则显示'无部门'选项)
	 * @param enterpriseId 公司id
	 * @return status:error/success msg:错误或成功消息  topDepartmentItemList:一级部门ItemVO集合
	 */
	Map<String, Object> findTopDepartmentByEnterpriseId(String enterpriseId);
	
	/**
	 * 根据公司id和部门id查询某部门下所有人员ItemVO
	 * @param enterpriseId 公司id
	 * @param departmentId 一级部门id,若id为-1,则显示无部门人员信息
	 * @return  status:error/success msg:错误或成功消息  userItemList:人员ItemVO集合
	 */
	Map<String, Object> findUserItemListByEnterpriseIdAndDepartmentId(String enterpriseId, String departmentId);
	
	/**
	 * 查询某部门下所有子部门id(包括子子部门id)
	 * @param departmentId 部门id
	 * @return status:error/success msg:错误或成功消息  subDepartmentIdList:子部门id集合
	 */
	Map<String, Object> findAllSubDepartmentId(String departmentId);
		
	/**
	 * 根据部门id,查询部门名称  规则:(一级部门_二级部门_三级部门)
	 * @param departmentId 部门id
	 * @return status:error/success msg:错误或成功消息  departmentName:部门名称
	 */
	Map<String, Object> findDepartmentName(String departmentId);
	
	/**
	 * 根据公司id,查询某公司的购卡记录(已支付的记录)(若page和size都为-1,则为全部查找;否则为分页查找) 按购买日期降序排序
	 * @param page 请求第几页  从0开始   
	 * @param size 每页显示数量
	 * @param enterpriseId 公司id
	 * @return status:error/success msg:错误或成功消息  businessCardRecordItemList:购卡记录集合   total:全部购卡记录数量 
	 */
	Map<String, Object> findBusinessCardRecordByEnterpriseId(Integer page, Integer size, String enterpriseId);
	
	/**
	 * 根据公司id和筛选条件,查询消费记录(状态为:用户主动支付订单)(若page和size都为-1,则为全部查找,且不考虑筛选条件;否则为分页查找,考虑筛选条件)
	 * @param page 请求第几页  从0开始   
	 * @param size 每页显示数量
	 * @param userNameForShow 筛选条件可选  用户名称  规则:若为已认证,则显示真实姓名,否则显示昵称
	 * @param departmentName 筛选条件可选  部门名称
	 * @param beginTime 筛选条件可选  会议开始时间
	 * @param endTime 筛选条件可选  会议结束时间
	 * @param enterpriseId 公司id
	 * @return status:error/success msg:错误或成功消息  orderItemList:匹配筛选条件的消费记录集合   total:匹配筛选条件的全部消费记录数量 
	 */
	Map<String, Object> findOrderItemByEnterpriseId(Integer page, Integer size, String userNameForShow, String departmentName, String beginTime, String endTime, String enterpriseId);
	
	/**
	 * 查询认证审核未通过的公司
	 * @param page 请求第几页  从0开始   
	 * @param size 每页显示数量
	 * @return status:error/success msg:错误或成功消息  certificationNotPassedEnterpriseItemList:认证审核未通过的公司ItemVO total:认证审核未通过的全部公司数量
	 */
	Map<String, Object> findCertificationNotPassedEnterpriseItemVO(Integer page, Integer size);
	
	/**
	 * 查询已通过认证审核的公司
	 * @param page 请求第几页  从0开始   
	 * @param size 每页显示数量
	 * @return status:error/success msg:错误或成功消息  certificationPassedEnterpriseItemList:已通过认证审核的公司ItemVO total:已通过认证审核的全部公司数量
	 */
	Map<String, Object> findCertificationPassedEnterpriseItemVO(Integer page, Integer size);
	
	/**
	 * 查询已提交认证，但待审核的公司
	 * @param page 请求第几页  从0开始   
	 * @param size 每页显示数量
	 * @return status:error/success msg:错误或成功消息  certificationWaitingEnterpriseItemList:已提交认证,但待审核的公司ItemVO total:已提交认证，但待审核的公司的全部公司数量
	 */
	Map<String, Object> findCertificationWaitingEnterpriseItemVO(Integer page, Integer size);
	
	/**
	 * 根据公司id,查询认证未通过公司详细信息
	 * @param enterpriseId 公司id
	 * @return status:error/success msg:错误或成功消息  detail:认证未通过公司详细信息VO
	 */
	Map<String, Object> findCertificationNotPassedEnterpriseDetailVO(String enterpriseId);
	
	/**
	 * 根据公司id,查询认证已通过公司详细信息
	 * @param enterpriseId 公司id
	 * @return status:error/success msg:错误或成功消息  detail:认证已通过公司详细信息VO
	 */
	Map<String, Object> findCertificationPassedEnterpriseDetailVO(String enterpriseId);
	
	/**
	 * 根据公司id,查询已提交认证,但待审核的公司详细信息
	 * @param enterpriseId 公司id
	 * @return status:error/success msg:错误或成功消息  detail:待审核公司详细信息VO
	 */	
	Map<String, Object> findCertificationWaitingEnterpriseDetailVO(String enterpriseId);
	
	/**
	 * 拒绝或同意公司认证申请
	 * @param enterpriseId 公司id
	 * @param status 公司状态 拒绝:3  同意:1
	 * @param refuseReason 若拒绝,则需输入拒绝原因
	 * @param userId 操作者id
	 * @return status:error/success msg:错误或成功消息
	 */
	Map<String, Object> updateEnterpriseStatus(String enterpriseId, String status, String refuseReason, String userId);
}
